home *** CD-ROM | disk | FTP | other *** search
- package sun.applet;
-
- import java.lang.Thread.State;
- import java.lang.reflect.Field;
- import java.net.URLClassLoader;
- import java.security.AccessControlContext;
- import java.security.AccessController;
- import java.util.HashSet;
- import sun.awt.AWTSecurityManager;
- import sun.awt.AppContext;
- import sun.security.util.SecurityConstants;
-
- public class AppletSecurity extends AWTSecurityManager {
- private AppContext mainAppContext;
- private static Field facc = null;
- private static Field fcontext = null;
- private HashSet restrictedPackages = new HashSet();
- private boolean inThreadGroupCheck = false;
-
- public AppletSecurity() {
- this.reset();
- this.mainAppContext = AppContext.getAppContext();
- }
-
- public void reset() {
- this.restrictedPackages.clear();
- AccessController.doPrivileged(new 1(this));
- }
-
- private AppletClassLoader currentAppletClassLoader() {
- ClassLoader var1 = this.currentClassLoader();
- if (var1 != null && !(var1 instanceof AppletClassLoader)) {
- Class[] var2 = this.getClassContext();
-
- for(int var3 = 0; var3 < var2.length; ++var3) {
- var1 = var2[var3].getClassLoader();
- if (var1 instanceof AppletClassLoader) {
- return (AppletClassLoader)var1;
- }
- }
-
- for(int var8 = 0; var8 < var2.length; ++var8) {
- ClassLoader var4 = var2[var8].getClassLoader();
- if (var4 instanceof URLClassLoader) {
- var1 = (ClassLoader)AccessController.doPrivileged(new 2(this, var4));
- if (var1 != null) {
- return (AppletClassLoader)var1;
- }
- }
- }
-
- var1 = Thread.currentThread().getContextClassLoader();
- if (var1 instanceof AppletClassLoader) {
- return (AppletClassLoader)var1;
- } else {
- return (AppletClassLoader)null;
- }
- } else {
- return (AppletClassLoader)var1;
- }
- }
-
- protected boolean inThreadGroup(ThreadGroup var1) {
- return this.currentAppletClassLoader() == null ? false : this.getThreadGroup().parentOf(var1);
- }
-
- protected boolean inThreadGroup(Thread var1) {
- return this.inThreadGroup(var1.getThreadGroup());
- }
-
- public void checkAccess(Thread var1) {
- if (var1.getState() != State.TERMINATED && !this.inThreadGroup(var1)) {
- this.checkPermission(SecurityConstants.MODIFY_THREAD_PERMISSION);
- }
-
- }
-
- public synchronized void checkAccess(ThreadGroup var1) {
- if (this.inThreadGroupCheck) {
- this.checkPermission(SecurityConstants.MODIFY_THREADGROUP_PERMISSION);
- } else {
- try {
- this.inThreadGroupCheck = true;
- if (!this.inThreadGroup(var1)) {
- this.checkPermission(SecurityConstants.MODIFY_THREADGROUP_PERMISSION);
- }
- } finally {
- this.inThreadGroupCheck = false;
- }
- }
-
- }
-
- public void checkPackageAccess(String var1) {
- super.checkPackageAccess(var1);
-
- for(String var3 : this.restrictedPackages) {
- if (var1.equals(var3) || var1.startsWith(var3 + ".")) {
- this.checkPermission(new RuntimePermission("accessClassInPackage." + var1));
- }
- }
-
- }
-
- public void checkAwtEventQueueAccess() {
- AppContext var1 = AppContext.getAppContext();
- AppletClassLoader var2 = this.currentAppletClassLoader();
- if (var1 == this.mainAppContext && var2 != null) {
- super.checkAwtEventQueueAccess();
- }
-
- }
-
- public ThreadGroup getThreadGroup() {
- AppletClassLoader var1 = this.currentAppletClassLoader();
- ThreadGroup var2 = var1 == null ? null : var1.getThreadGroup();
- return var2 != null ? var2 : super.getThreadGroup();
- }
-
- public AppContext getAppContext() {
- AppletClassLoader var1 = this.currentAppletClassLoader();
- if (var1 == null) {
- return null;
- } else {
- AppContext var2 = var1.getAppContext();
- if (var2 == null) {
- throw new SecurityException("Applet classloader has invalid AppContext");
- } else {
- return var2;
- }
- }
- }
-
- // $FF: synthetic method
- static HashSet access$000(AppletSecurity var0) {
- return var0.restrictedPackages;
- }
-
- // $FF: synthetic method
- static Field access$100() {
- return facc;
- }
-
- // $FF: synthetic method
- static Field access$200() {
- return fcontext;
- }
-
- static {
- try {
- facc = URLClassLoader.class.getDeclaredField("acc");
- facc.setAccessible(true);
- fcontext = AccessControlContext.class.getDeclaredField("context");
- fcontext.setAccessible(true);
- } catch (NoSuchFieldException var1) {
- throw new UnsupportedOperationException(var1);
- }
- }
- }
-